import observe from './observe';
import Dep from './Dep';
/**
 * 响应式数据更新方法
 * @param {Object} data {}
 * @param {*} key a
 * @param {*} val 
 */
export default function defineReactive(data, key, val) {
    const dep = new Dep();
    if (arguments.length == 2) {
        val = data[key];
    }
    //递归
    let childObj = observe(val);
    Object.defineProperty(data, key, {
        //可遍历，枚举
        enumerable: true,
        //可配置，删除属性
        configurable: true,

        get() {
            // console.log("获取" + key + "属性数据：" + val);
            //如果处于收集阶段
            if (Dep.target) {
                dep.depend();
                if (childObj) {
                    childObj.dep.depend();
                }
            }
            return val;
        },
        set(newVal) {
            // console.log("设置" + key + "属性数据：" + newVal);
            if (val === newVal) {
                return;
            }
            val = newVal;
            //当设置新值，新值也要observe
            childObj = observe(newVal);
            //发布订阅模式
            dep.notify();
        }
    })
};